#ifndef  __APP_NETWORK_H__
#define  __APP_NETWORK_H__
#ifdef __cplusplus
 extern "C" {
#endif

#ifdef   APP_GLOBALS_NETWORK
#define  APP_EXT_NETWORK
#else
#define  APP_EXT_NETWORK  extern
#endif

#define Net_ServerResponse_None  0
#define Net_ServerResponse_OK    1
#define Net_ServerResponse_NG    2

/* OS_Q */
#define NetDataHandleQNum        3                      //消息队列长度

#define OSNETWORKFlags_Scand                        ((OS_FLAGS)DEF_BIT_00)
#define OSNETWORKFlags_Timing                       ((OS_FLAGS)DEF_BIT_01)
#define OSNETWORKFlags_ALL                          (OSNETWORKFlags_Scand|\
                                                     OSNETWORKFlags_Timing)

#define OSNETWORKHandleCacheFlags_ALL               (DEF_BIT_00|DEF_BIT_01)


/* 数据包组成结构 */
#define DataFrameLength_TUANCHENG        9
#define DataFrameLength_TotalLength      2
#define DataFrameLength_DTUID            20
#define DataFrameLength_Command          1
#define DataFrameLength_SyncID           2
#define DataFrameLength_Extend           6
#define DataFrameLength_Checksum         2
#define DataFrameLength_Min             (DataFrameLength_TUANCHENG   +\
                                         DataFrameLength_TotalLength +\
                                         DataFrameLength_DTUID       +\
                                         DataFrameLength_Command     +\
                                         DataFrameLength_SyncID      +\
                                         DataFrameLength_Extend      +\
                                         DataFrameLength_Checksum    )   // 最小数据包大小

/* 数据包索引 */
#define DataFrameOrd_TUANCHENG           0                                                          // 标头索引
#define DataFrameOrd_TotalLength        (DataFrameOrd_TUANCHENG + DataFrameLength_TUANCHENG)        // 数据包长度索引
#define DataFrameOrd_DTUID              (DataFrameOrd_TotalLength + DataFrameLength_TotalLength)    // 序列号索引
#define DataFrameOrd_Command            (DataFrameOrd_DTUID     + DataFrameLength_DTUID)            // 命令码索引
#define DataFrameOrd_SyncID             (DataFrameOrd_Command   + DataFrameLength_Command)          // 同步ID索引
#define DataFrameOrd_Extend             (DataFrameOrd_SyncID    + DataFrameLength_SyncID)           // 保留字节索引
#define DataFrameOrd_Content            (DataFrameLength_Min - DataFrameLength_Checksum)            // 数据内容索引

/* 协议命令 */
#define NetWork_CMD_HeartBeat           0x10    //心跳包命令
#define NetWork_CMD_RealTimeData        0x11    //实时数据查询命令
#define NetWork_CMD_QueryParameter      0x12    //配置参数查询命令
#define NetWork_CMD_SetParameter        0x13    //配置参数设置命令
#define NetWork_CMD_TestDataReport      0x15    //测试数据上报命令

#define NetWork_HeartBeat_DataSize      DataFrameLength_Min + 6    //心跳包数据大小
#define NetWork_DataBase_OperatePack    5                          //网络数据访问数据库最小包长度(地址4字节 + 数据长度1字节)

// 实时数据使能表
#define NetWork_RtDataEnableTable {\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
0xFF,\
}

// 测试数据主动上传流程
enum{
    UpProc_None = 0,               // 无工作流程
    UpProc_CfgBasedat,             // 配置基础数据
    UpProc_SendBaseData,           // 发送基础数据
    UpProc_WaitAck1,               // 等待服务器响应1
    UpProc_CfgCurveData,           // 配置曲线数据
    UpProc_SendCurveData,          // 发送曲线数据
    UpProc_WaitAck2,               // 等待服务器响应2
    UpProc_SendOKJudge,            // 判断发送完成
    UpProc_ClearFlag,              // 清除作业标志
    UpProc_Error,                  // 异常处理
};

// 测试数据结构体
typedef struct{
    uint16_t syncID;             // 同步ID
    uint8_t testType;            // 测试类型
    uint8_t dataType;            // 数据类型
    uint16_t packIndex;          // 分包索引
    uint16_t packNum;            // 分包总数
    uint16_t dataLen;            // 数据长度
    uint8_t * dataPoint;         // 数据指针
    uint32_t dataAddr;           // 数据地址
    uint32_t curveAddr;          // 曲线首地址(双字节寻址)
    uint16_t curveDataLen;       // 曲线数据长度
    uint16_t curveAddrOffset;    // 曲线与曲线偏移地址量
    uint32_t totalPackLen;       // 总包长度(字节)
    uint32_t remainPackLen;      // 剩余包长度(字节)
    uint32_t finishTimeStamp;    // 完成时间戳
}NetWorkTestData_ST;

// 测试流程完成结构体
typedef struct{
    uint8_t finishFlag;         // 工作流程测试结束标志
    uint8_t workProcType;       // 工作类型
}NetWorkTestProc_ST;

/* 全局变量主动extern */
extern uint8_t UpEepromOK; //更新EEPROM完成
extern uint8_t workProcess;

uint16_t NetWork_UpdateWifiSyncID(void);
uint8_t NetWork_HeartReport(uint16_t syncID);
uint8_t Network_RealTimeData(uint16_t syncID);
void NetWork_SetTestFisishFlag(uint8_t testType);

#ifdef __cplusplus
}
#endif
#endif   /*  __APP_NETWORK_H__  */

/******************* (C) COPYRIGHT 2010 Feirui *****END OF FILE****/
